home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright 1992 Eric R. Smith. All rights reserved.
- * Redistribution is permitted only if the distribution
- * is not for profit, and only if all documentation
- * (including, in particular, the file "copying")
- * is included in the distribution in unmodified form.
- * THIS PROGRAM COMES WITH ABSOLUTELY NO WARRANTY, NOT
- * EVEN THE IMPLIED WARRANTIES OF MERCHANTIBILITY OR
- * FITNESS FOR A PARTICULAR PURPOSE. USE AT YOUR OWN
- * RISK.
- */
- #include "xgem.h"
- #include <osbind.h>
- #include <mintbind.h>
- #include <fcntl.h>
- #include <signal.h>
- #include <minimal.h>
- #include <string.h>
- #include <unistd.h>
- #include "toswin.h"
- #include "twdefs.h"
- #include "twproto.h"
- #include <linea.h>
-
- extern void free();
- void *heapbase = 0;
- long heapsize = 96*1024L;
- long _stksiz = 6 * 1024L;
- long termfunc;
-
- WINDOW *focuswin;
-
- #ifndef TIOCSWINSZ
- #define TIOCGWINSZ (('T'<< 8) | 11)
- #define TIOCSWINSZ (('T'<< 8) | 12)
- #endif
-
- /* set if we're running MultiTOS */
- int MultiTOS = 0;
-
- /* set if we're an accessory under old TOS */
- int oldACC = 0;
- int global_flag = 0; /* set to O_GLOBAL if necessary */
-
- /* file descriptor of TOSRUN */
- int trun_fd;
- extern long fd_mask;
-
- /* is the "tools" window open? */
- int showtools = 1;
- int toolx, tooly; /* location of tools window */
-
- /* do we automatically close any windows that have exited? */
- int autoclose;
-
- /* try to scroll nicely? */
- int smoothscroll;
-
- /* 1 for "point to type", 0 for "click to type" */
- int point_to_type;
- WINDOW *toolwindow;
-
- MENU *sysbar; /* the system menu bar */
- MENU *globalmenu;
- MENU *windowmenu;
- MENU *filemenu, *editmenu;
- ENTRY *closeentry;
- ENTRY *copyentry, *pasteentry;
- MENU *gadgmenu;
-
- int appl_menus = 1; /* OK to load/show application menus */
- int sys_menu = 1; /* set if the system menu is being displayed */
-
- OBJECT *deskobj;
- OBJECT *cutdialog, *fontdial;
- OBJECT *menudef_dialog;
- OBJECT *winsize_dialog;
-
- #define ALLGADGETS 0xfff /* everything including the INFO line */
- #define MINGADGETS 0x01f /* NAME, CLOSER, FULLER, MOVER, INFO */
- #define NOGADGETS 0x000
-
- int default_kind = ALLGADGETS;
-
- extern char progpath[128];
- static char fname[256];
- int altrow, altcol;
- int stdrow, stdcol;
- int altscroll, stdscroll;
-
- char stdconfig[128] = "TOSWIN.CNF";
- char nullstr[2] = "";
-
- int lineAset = 0;
- int lineArow, lineAcol;
-
- #ifdef OLD_WAY
- /*
- * signal handler for dead children
- * all we do is collect (and discard :-( ) the exit code
- * it's up to fd_input() and friends to figure out when no
- * more data exists for a window
- */
-
- #define WNOHANG 1
-
- void
- dead_kid()
- {
- long r;
-
- r = Pwait3(WNOHANG, (void *)0);
-
- }
-
- #endif
-
- /*
- * signal handler for SIGINT and SIGQUIT: these get passed along to the
- * process group in the focus window
- */
-
- void
- send_sig(sig)
- long sig;
- {
- TEXTWIN *t;
-
- if (focuswin && focuswin->wtype == TEXT_WIN) {
- t = focuswin->extra;
- if (t->pgrp) {
- (void)Pkill(-t->pgrp, (short)sig);
- }
- }
- }
-
- void
- ignore()
- {
- }
-
- char argstr[128];
-
- void
- newstdwin()
- {
- TEXTWIN *t;
-
- if ((getprogname(fname) == OK) &&
- (getargs(fname, argstr) == OK) ) {
- t = newproc(fname, argstr, progpath, 0, 0, stdcol, stdrow, stdscroll,
- default_kind, default_font, default_height);
- if (t)
- open_window(t->win);
- }
- }
-
- void
- newaltwin()
- {
- TEXTWIN *t;
-
- if ((getprogname(fname) == OK) &&
- (getargs(fname, argstr) == OK) ) {
- t = newproc(fname, argstr, progpath, 0, 0, altcol, altrow, altscroll,
- default_kind, default_font, default_height);
- if (t)
- open_window(t->win);
- }
- }
-
- void
- get_winsize(colptr, rowptr, sptr)
- int *colptr, *rowptr, *sptr;
- {
- int x, y, w, h, i;
- TEDINFO *ted;
- char *rowstr, *colstr, *scrstr;
- int row, col, scroll;
-
- row = *rowptr;
- col = *colptr;
- scroll = *sptr;
-
- ted = (TEDINFO *)winsize_dialog[ROWBOX].ob_spec;
- rowstr = (char *)ted->te_ptext;
- strcpy(rowstr, valdec(row));
- ted = (TEDINFO *)winsize_dialog[COLBOX].ob_spec;
- colstr = (char *)ted->te_ptext;
- strcpy(colstr, valdec(col));
- ted = (TEDINFO *)winsize_dialog[SCRBOX].ob_spec;
- scrstr = (char *)ted->te_ptext;
- strcpy(scrstr, valdec(scroll));
-
- form_center(winsize_dialog, &x, &y, &w, &h);
-
- wind_update(1);
- form_dial(FMD_START, 0, 0, 32, 32, x, y, w, h);
- if (win_flourishes)
- form_dial(FMD_GROW, 0, 0, 32, 32, x, y, w, h);
-
- objc_draw(winsize_dialog, 0, 2, x, y, w, h);
-
- i = form_do(winsize_dialog, COLBOX);
-
- if (win_flourishes)
- form_dial(FMD_SHRINK, 0, 0, 32, 32, x, y, w, h);
-
- form_dial(FMD_FINISH, 0, 0, 32, 32, x, y, w, h);
- objc_change(winsize_dialog, i, 0, x, y, w, h, NORMAL, 0);
- wind_update(0);
- if (i != WINSIZOK) return;
-
- col = decval(colstr);
- if (col < MINCOLS) col = MINCOLS; else if (col > MAXCOLS) col = MAXCOLS;
- row = decval(rowstr);
- if (row < MINROWS) row = MINROWS; else if (row > MAXROWS) row = MAXROWS;
- scroll = decval(scrstr);
- if (scroll < 0) scroll = 0;
-
- *colptr = col;
- *rowptr = row;
- *sptr = scroll;
- }
-
- void
- set_altsiz()
- {
- get_winsize(&altcol, &altrow, &altscroll);
- }
-
- /*
- * set the line A variables and stdcol and
- * stdrow.
- */
- void
- set_linea(ncol, nrow)
- int ncol, nrow;
- {
- lineAset = 1;
- stdrow = nrow;
- stdcol = ncol;
- V_CEL_MX = stdcol - 1;
- V_CEL_MY = stdrow - 1;
- }
-
- void
- set_stdsiz()
- {
- int ncol, nrow;
-
- ncol = stdcol;
- nrow = stdrow;
- get_winsize(&ncol, &nrow, &stdscroll);
- set_linea(ncol, nrow);
- }
-
- void
- set_winsiz()
- {
- TEXTWIN *t;
- int row, col, scroll;
- struct winsize tw;
-
- if (gl_topwin && gl_topwin->wtype == TEXT_WIN) {
- t = gl_topwin->extra;
- row = NROWS(t);
- col = NCOLS(t);
- scroll = SCROLLBACK(t);
- get_winsize(&col, &row, &scroll);
- if (col != NCOLS(t) || row != NROWS(t) ||
- scroll != SCROLLBACK(t)) {
- curs_off(t);
- resize_textwin(t, col, row, scroll);
- curs_on(t);
- tw.ws_row = row;
- tw.ws_col = col;
- tw.ws_xpixel = tw.ws_ypixel = 0;
- (void)Fcntl(t->fd, &tw, TIOCSWINSZ);
- (void)Pkill(-t->pgrp, SIGWINCH);
- }
- }
- }
-
- void
- set_wintitle()
- {
- WINDOW *v;
- OBJECT *titledial;
- TEDINFO *ted;
- char *titlestr;
- int x, y, w, h, ret;
-
- v = gl_topwin;
- if (v && v->wtype == TEXT_WIN) {
- rsrc_gaddr(0, TITLDIAL, &titledial);
- ted = (TEDINFO *)titledial[TITLSTR].ob_spec;
- titlestr = (char *)ted->te_ptext;
- strncpy(titlestr, v->wi_title, 32);
-
- form_center(titledial, &x, &y, &w, &h);
- wind_update(1);
- form_dial(FMD_START, 0, 0, 32, 32, x, y, w, h);
- if (win_flourishes)
- form_dial(FMD_GROW, 0, 0, 32, 32, x, y, w, h);
- objc_draw(titledial, 0, 2, x, y, w, h);
- ret = form_do(titledial, TITLSTR);
- if (win_flourishes)
- form_dial(FMD_SHRINK, 0, 0, 32, 32, x, y, w, h);
- form_dial(FMD_FINISH, 0, 0, 32, 32, x, y, w, h);
-
- objc_change(titledial, ret, 0, x, y, w, h, NORMAL, 0);
- wind_update(0);
- if (ret != TITLOK) return;
- title_window(v, titlestr);
- }
- }
-
- /* shut down all windows */
- void
- shutdown()
- {
- WINDOW *w;
-
- for (w = gl_winlist; w; w = w->next)
- (*w->closed)(w);
- }
-
- void
- quit()
- {
- if (_app) {
- gl_done = 1;
- shutdown();
- }
- }
-
- void
- do_cut()
- {
- extern void cut(), paste_to_desk();
- extern char *cliptext;
- int x, y;
-
- if (gl_topwin) {
- cut(gl_topwin);
- objc_offset(deskobj, CLIPICN, &x, &y);
- if (cliptext)
- paste_to_desk(x+1, y+1);
- }
- }
-
- void
- do_paste()
- {
- extern char *read_scrap();
- extern void paste();
- extern char *cliptext;
-
- if (!gl_topwin) return;
-
- if (cliptext)
- free(cliptext);
-
- cliptext = read_scrap("SCRAP.TXT");
- if (!cliptext) {
- form_alert(1, AlertStrng(SCRAPDAT));
- return;
- }
- paste(gl_topwin);
- }
-
- void
- set_wfont()
- {
- int font, point;
- int i;
- TEXTWIN *t;
-
- if (gl_topwin && gl_topwin->wtype == TEXT_WIN) {
- t = gl_topwin->extra;
- font = t->cfont;
- point = t->cpoints;
- i = get_font(&font, &point);
- if (i == OK)
- textwin_setfont(t, font, point);
- }
- }
-
- void
- set_dfont()
- {
- int font, point;
-
- font = default_font;
- point = default_height;
-
- if (get_font(&font, &point) == OK) {
- default_font = font;
- default_height = point;
- }
- }
-
- /*
- * functions for setting window gadgets
- * if "info_ok" is nonzero, we allow the
- * user to select the INFO line, otherwise
- * not. "kindptr" points to the current
- * settings on input, and is set to the
- * new settings on output.
- */
-
- void
- get_gadgets(kindptr, info_ok)
- int *kindptr;
- int info_ok;
- {
- OBJECT *gadgdial;
- int kind = *kindptr;
- int ret;
- int x, y, w, h;
- int doubleclick = 0;
-
- rsrc_gaddr(0, GADGDIAL, &gadgdial);
- form_center(gadgdial, &x, &y, &w, &h);
-
- /* make info_ok a mask */
- if (info_ok)
- info_ok = ~0;
- else
- info_ok = ~INFO;
-
- wind_update(1);
-
- form_dial(FMD_START, 0, 0, 32, 32, x, y, w, h);
- if (win_flourishes)
- form_dial(FMD_GROW, 0, 0, 32, 32, x, y, w, h);
-
- redisplay:
- gadgdial[GCLOSER].ob_state = (kind & CLOSER) ? SELECTED : NORMAL;
- gadgdial[GTITLE].ob_state = (kind & MOVER) ? SELECTED : NORMAL;
- if (info_ok & INFO) {
- gadgdial[GMENU].ob_state = (kind & INFO) ? SELECTED : NORMAL;
- } else {
- gadgdial[GMENU].ob_state = DISABLED;
- }
- gadgdial[GFULLER].ob_state = (kind & FULLER) ? SELECTED : NORMAL;
- gadgdial[GVSLIDE].ob_state = (kind & VSLIDE) ? SELECTED : NORMAL;
- gadgdial[GHSLIDE].ob_state = (kind & HSLIDE) ? SELECTED : NORMAL;
- gadgdial[GSIZER].ob_state = (kind & SIZER) ? SELECTED : NORMAL;
- objc_draw(gadgdial, 0, 2, x, y, w, h);
- ret = form_do(gadgdial, 0);
- if (ret & 0x8000) {
- doubleclick = 1;
- ret &= 0x7fff;
- }
- if (ret == GALLGAD) {
- kind = ALLGADGETS & info_ok; if (!doubleclick) goto redisplay;
- } else if (ret == GTOPGAD) {
- kind = MINGADGETS & info_ok; if (!doubleclick) goto redisplay;
- } else if (ret == GNOGAD) {
- kind = NOGADGETS; if (!doubleclick) goto redisplay;
- } else if (ret == GADGOK) {
- kind = 0;
- if (gadgdial[GCLOSER].ob_state == SELECTED)
- kind |= CLOSER;
- if (gadgdial[GFULLER].ob_state == SELECTED)
- kind |= FULLER;
- if (gadgdial[GSIZER].ob_state == SELECTED)
- kind |= SIZER;
- if (gadgdial[GTITLE].ob_state == SELECTED)
- kind |= (NAME|MOVER);
- if (gadgdial[GMENU].ob_state == SELECTED)
- kind |= INFO;
- if (gadgdial[GVSLIDE].ob_state == SELECTED)
- kind |= (UPARROW|DNARROW|VSLIDE);
- if (gadgdial[GHSLIDE].ob_state == SELECTED)
- kind |= (LFARROW|RTARROW|HSLIDE);
- } else if (ret == GADGCAN) {
- kind = *kindptr;
- }
-
- if (win_flourishes)
- form_dial(FMD_SHRINK, 0, 0, 32, 32, x, y, w, h);
- form_dial(FMD_FINISH, 0, 0, 32, 32, x, y, w, h);
- wind_update(0);
-
- gadgdial[ret].ob_state = NORMAL;
-
- *kindptr = kind;
- }
-
- void
- set_wkind()
- {
- int kind;
-
- if (gl_topwin && gl_topwin->wtype == TEXT_WIN) {
- kind = gl_topwin->wi_kind;
- get_gadgets(&kind, gl_topwin->menu ? 1 : 0);
- change_window_gadgets(gl_topwin, kind);
- }
- }
-
- void
- set_dkind()
- {
- get_gadgets(&default_kind, 1);
- }
-
- /*
- * function that toggles an (integer) on/off switch in the global menu
- */
-
- void
- toggle(var)
- int *var;
- {
- ENTRY *e;
- MENU *m = globalmenu;
- WINDOW *v;
- int x, y, w, h;
-
- *var = !*var;
- for (e = m->contents; e; e = e->next) {
- if (e->arg == var)
- break;
- }
-
- if (e) {
- if (*var) {
- check_entry(m, e);
- } else {
- uncheck_entry(m, e);
- }
- }
-
- if (var == &align_windows && *var) {
- for(v = gl_winlist; v; v = v->next) {
- if (v->wtype == TEXT_WIN && v->wi_handle >= 0) {
- wind_get(v->wi_handle, WF_CURRXYWH, &x,
- &y, &w, &h);
- (*v->moved)(v, x, y, w, h);
- }
- }
- }
- }
-
- /* bury the topmost window */
-
- void
- bury()
- {
- new_topwin(0);
- }
-
- /* redraw the whole screen */
-
- void
- doredraw()
- {
- sys_menu = 1;
- #ifdef GLOBAL_APPL_MENUS
- if (gl_topwin && gl_topwin->wtype == TEXT_WIN) {
- if (gl_topwin->menu && appl_menus) {
- sys_menu = 0;
- show_menu(gl_topwin->menu);
- }
- }
- #endif
- if (sys_menu)
- show_menu(sysbar);
-
- redraw_screen(xdesk, ydesk, wdesk, hdesk);
- }
-
- void
- dieloop()
- {
- int msgbuff[8];
-
- for(;;) {
- (void)evnt_mesag(msgbuff);
- }
- }
-
- static void (*oldttop)();
-
- static void
- tooltop(v)
- WINDOW *v;
- {
- extern void top_menu();
-
- top_menu(v, oldttop);
- }
-
- void
- toolclose(v)
- WINDOW *v;
- {
- if (!_app)
- ac_close();
- else {
- showtools = 0;
- close_window(v);
- }
- }
-
- void
- toolopen()
- {
- if (showtools) {
- (*toolwindow->topped)(toolwindow);
- } else {
- showtools = 1;
- open_window(toolwindow);
- }
- }
-
- char *Strng(index)
- int index;
- {
- char *addr;
-
- addr = 0;
- rsrc_gaddr(5, index, &addr);
- return addr;
- }
-
- int __mint;
-
- /*
- * get MiNT version number
- */
-
- static void
- getMiNT()
- {
- long *cookie;
-
- /* get the system time in 200HZ ticks from the BIOS _hz_200 variable */
-
- cookie = *((long **) 0x5a0L);
- if (!cookie)
- __mint = 0;
- else {
- while (*cookie) {
- if (*cookie == 0x4d694e54L) { /* MiNT */
- __mint = (int) cookie[1];
- return;
- }
- cookie += 2;
- }
- }
- __mint = 0;
- }
-
- int
- main()
- {
- extern short _global[]; /* AES global array */
- int i;
-
- (void)Supexec(getMiNT);
- init_gem();
- if (_global[1] == -1) { /* multitasking AES? */
- MultiTOS = 1;
- } else {
- if (_app)
- (void)Cursconf(0, 0); /* hide cursor */
- else {
- oldACC = 1;
- global_flag = 0x1000;
- termfunc = (long)Setexc(0x102, -1L);
- heapbase = (void *)Malloc(heapsize);
- if (__mint == 0 ||
- (heapbase = (void *)Malloc(heapsize)) == 0)
- {
- close_vwork();
- while(1) evnt_loop();
- }
- }
- }
-
- linea0();
- toolx = xdesk;
- tooly = ydesk;
- graf_mouse(BEE, 0L);
- i = rsrc_load("TOSWIN.RSC");
- if (i == 0) {
- form_alert(1, "[3][TOSWIN.RSC not found][Cancel]");
- if (oldACC)
- dieloop();
- else {
- exit_gem(1);
- }
- }
- graf_mouse(ARROW, 0L);
-
- if (
- rsrc_gaddr(0, DESKTOP, &deskobj) == 0 ||
- rsrc_gaddr(0, MENUDEF, &menudef_dialog) == 0 ||
- rsrc_gaddr(0, WINSIZE, &winsize_dialog) == 0 ||
- rsrc_gaddr(0, FNTDIAL, &fontdial) == 0 ||
- rsrc_gaddr(0, CUTOPTS, &cutdialog) == 0) {
- form_alert(1, "[3][TOSWIN.RSC corrupted??][Cancel]");
- if (oldACC)
- dieloop();
- else
- exit_gem(1);
- }
-
- if (MultiTOS || oldACC) {
- menu_register(gl_apid, Strng(TOSPROGS));
- }
- init_fontdesc();
- gl_timer = MultiTOS ? LONGWAIT : NOMULTIWAIT;
- fn_timeout = oldACC ? acc_input : fd_input;
- fn_message = iconify_message;
- fn_mouse = desk_mouse;
-
- about_string = Strng(ABOUTTW);
- about_func = toolopen;
-
- sysbar = filemenu = create_menu(Strng(SFILE));
- (void)add_entry(filemenu, Strng(SOPNSTD), newstdwin, NULL, 0, NORMAL);
- (void)add_entry(filemenu, Strng(SOPNALT), newaltwin, NULL, 0, NORMAL);
- closeentry = add_entry(filemenu, Strng(SCLOSE), g_close, NULL,
- 0, DISABLED);
- (void)add_entry(filemenu, "---", about_func, NULL, 0, DISABLED);
- (void)add_entry(filemenu, Strng(SLOADCFG), load_config, NULL, 0, NORMAL);
- (void)add_entry(filemenu, Strng(SSAVECFG), save_config, NULL, 0, NORMAL);
- (void)add_entry(filemenu, "---", about_func, NULL, 0, DISABLED);
- (void)add_entry(filemenu, Strng(SSETMENU), config_menu, sysbar,
- 0, NORMAL);
- (void)add_entry(filemenu, "---", quit, NULL, 0, DISABLED);
- (void)add_entry(filemenu, Strng(SQUIT), quit, NULL, 0, oldACC ? DISABLED : NORMAL);
-
- editmenu = create_menu(Strng(SEDIT));
- copyentry = add_entry(editmenu, Strng(SCOPY), do_cut, NULL, 0, NORMAL);
- pasteentry = add_entry(editmenu, Strng(SPASTE), do_paste, NULL, 0, NORMAL);
- (void)add_entry(editmenu, "---", about_func, NULL, 0, DISABLED);
- (void)add_entry(editmenu, Strng(SPASTEOP), setcutoptions, NULL, 0, NORMAL);
- filemenu->next = editmenu;
-
- globalmenu = create_menu(Strng(SGLOBAL));
- (void)add_entry(globalmenu, Strng(SALIGNW), toggle, &align_windows,
- 0, NORMAL);
- #ifdef GLOBAL_APPL_MENUS
- (void)add_entry(globalmenu, Strng(SAPPMENU), togglemenu, &appl_menus,
- 0, CHECKED);
- #else
- (void)add_entry(globalmenu, Strng(SAPPMENU), toggle, &appl_menus,
- 0, CHECKED);
- #endif
- (void)add_entry(globalmenu, Strng(SAUTOCL), toggle, &autoclose, 0, NORMAL);
- (void)add_entry(globalmenu, Strng(SFLOURIS), toggle, &win_flourishes,
- 0, CHECKED);
- (void)add_entry(globalmenu, Strng(SPTTYPE), toggle, &point_to_type,
- 0, NORMAL);
- (void)add_entry(globalmenu, Strng(SSMOOTH), toggle, &smoothscroll,
- 0, NORMAL);
- (void)add_entry(globalmenu, "---", about_func, NULL, 0, DISABLED);
- (void)add_entry(globalmenu, Strng(SSETSTD), set_stdsiz, NULL,
- 0, NORMAL);
- (void)add_entry(globalmenu, Strng(SSETALT), set_altsiz, NULL,
- 0, NORMAL);
- (void)add_entry(globalmenu, Strng(SSETDFNT), set_dfont, NULL,
- 0, NORMAL);
- (void)add_entry(globalmenu, Strng(SSETDGAD), set_dkind, NULL,
- 0, NORMAL);
- (void)add_entry(globalmenu, "---", about_func, NULL, 0, DISABLED);
- (void)add_entry(globalmenu, Strng(SENVIRON), setenvoptions, NULL,
- 0, NORMAL);
- (void)add_entry(globalmenu, "---", about_func, NULL, 0, DISABLED);
- (void)add_entry(globalmenu, Strng(SREDRAW), doredraw, NULL,
- 0, NORMAL);
- editmenu->next = globalmenu;
-
- windowmenu = create_menu(Strng(SWINDOW));
- (void)add_entry(windowmenu, Strng(SBURY), bury, NULL, 0, DISABLED);
- (void)add_entry(windowmenu, Strng(SICONIFY), iconify_topwin,
- NULL, 0, DISABLED);
- (void)add_entry(windowmenu, "---", about_func, NULL, 0, DISABLED);
- (void)add_entry(windowmenu, Strng(SLITERAL), send_char,
- NULL, 0, DISABLED);
- (void)add_entry(windowmenu, "---", about_func, NULL, 0, DISABLED);
- (void)add_entry(windowmenu, Strng(SSETWSIZ), set_winsiz, NULL,
- 0, DISABLED);
- (void)add_entry(windowmenu, Strng(SSETWFNT), set_wfont, NULL,
- 0, DISABLED);
- (void)add_entry(windowmenu, Strng(SSETWGAD), set_wkind, NULL,
- 0, DISABLED);
- (void)add_entry(windowmenu, Strng(SSETWTIT), set_wintitle, NULL,
- 0, DISABLED);
- globalmenu->next = windowmenu;
-
- gadgmenu = create_menu(Strng(SGADGETS));
- (void)add_entry(gadgmenu, Strng(STOGFULL), g_full, NULL, 0, DISABLED);
- (void)add_entry(gadgmenu, Strng(SMOVE), g_move, NULL, 0, DISABLED);
- (void)add_entry(gadgmenu, Strng(SSCRUP), g_scroll, (void *)(long)WA_UPLINE,
- 0, DISABLED);
- (void)add_entry(gadgmenu, Strng(SSCRDOWN), g_scroll, (void *)(long)WA_DNLINE,
- 0, DISABLED);
- (void)add_entry(gadgmenu, Strng(SSCRLEFT), g_scroll, (void *)(long)WA_LFLINE,
- 0, DISABLED);
- (void)add_entry(gadgmenu, Strng(SSCRRIGH), g_scroll, (void *)(long)WA_RTLINE,
- 0, DISABLED);
- windowmenu->next = gadgmenu;
-
- if (!oldACC) {
- #ifdef OLD_WAY
- (void)Psignal(SIGCHLD, dead_kid);
- #endif
- (void)Psignal(SIGINT, send_sig);
- (void)Psignal(SIGQUIT, send_sig);
- (void)Psignal(SIGHUP, send_sig);
- (void)Psignal(SIGTSTP, send_sig);
- (void)Psignal(SIGTTIN, ignore);
- (void)Psignal(SIGTTOU, ignore);
- }
-
- /* open up the TOSRUN pipe, so that the desktop can tell us to run stuff */
- trun_fd = Fcreate("U:\\PIPE\\TOSRUN", global_flag);
- if (trun_fd <= 0)
- trun_fd = 0;
- else {
- if (!oldACC)
- fd_mask |= (1L << trun_fd);
- (void)Fcntl(trun_fd, (long)O_NDELAY, F_SETFL);
- }
-
- /* set up window sizes */
- /* the standard size always matches the line A size; the alt size is
- * settable by the user
- */
-
- stdrow = lineArow = V_CEL_MY+1; stdcol = lineAcol = V_CEL_MX+1;
- altrow = (stdrow == 50) ? 25 : 50; altcol = 80;
-
- vsf_perimeter(vdi_handle, 0); /* no bars around perimeter */
-
- show_menu(sysbar); /* show_menu checks _app */
-
- /* try to load a standard config file */
- i = shel_find(stdconfig);
- if (i != 0) {
- load_config(stdconfig);
- }
-
- if (!_app)
- showtools = 1;
-
- i = CLOSER|MOVER|NAME;
- if (!_app) i |= INFO;
-
- toolwindow = create_objwin(deskobj, "TOSWIN", i,
- toolx, tooly, deskobj[0].ob_width, deskobj[0].ob_height);
- if (!_app) {
- toolwindow->menu = filemenu;
- toolwindow->infostr = strdup(menustr(filemenu));
- }
- oldttop = toolwindow->topped;
- toolwindow->topped = tooltop;
- toolwindow->closed = toolclose;
-
- if (_app && showtools)
- open_window(toolwindow);
-
- if (oldACC)
- close_vwork();
-
- evnt_loop();
-
- if (lineAset) {
- V_CEL_MX = lineAcol - 1;
- V_CEL_MY = lineArow - 1;
- }
- exit_gem(0);
- return 0;
- }
-
- /*
- * functions for when we are accessories
- */
-
- int opened = 0;
-
- void
- ac_open()
- {
- WINDOW *w;
-
- if (!opened) {
- open_vwork();
- vsf_perimeter(vdi_handle, 0);
- for (w = gl_winlist; w; w = w->next) {
- if (open_window(w))
- opened = 1;
- }
- if (opened) return;
- if (gl_winlist) { /* bad error */
- form_alert(1, AlertStrng(NOOPEN));
- close_vwork();
- return;
- }
- }
- toolopen();
- if (!gl_winlist) {
- close_vwork();
- opened = 0;
- }
- if (lineAset) {
- set_linea(stdcol, stdrow);
- }
- }
-
- void
- ac_close()
- {
- WINDOW *w;
-
- if (!opened) return;
-
- for (w = gl_winlist; w; w = w->next)
- close_window(w);
- close_vwork();
- opened = 0;
- if (lineAset) {
- V_CEL_MX = lineAcol - 1;
- V_CEL_MY = lineArow - 1;
- }
- }
-
- /* called when we get an AC_CLOSE message; this tells us that our
- * windows have been forcibly deleted on us
- */
-
- void
- force_ac_close()
- {
- WINDOW *w;
-
- if (opened) {
- for (w = gl_winlist; w; w = w->next) {
- w->wi_handle = -1;
- }
- close_vwork();
- opened = 0;
- }
- }
-
-
- /*
- * special sbrk() stuff; note that this requires the MiNT
- * library
- */
-
- void *
- _sbrk(sz)
- long sz;
- {
- void *foo;
-
- sz = (sz + 7) & ~((unsigned long)7L);
-
- if (heapbase) {
- if (sz >= heapsize) return 0;
- foo = heapbase;
- heapbase = (void *)((char *)heapbase + sz);
- heapsize -= sz;
- } else {
- foo = (void *)Malloc(sz);
- }
- return foo;
- }
-
- void *
- sbrk(sz)
- size_t sz;
- {
- return _sbrk((long)sz);
- }
-